
I'd like to program in Linux, where should I start?
It depends.
This presentation is the long answer

Raul Suarez
Using Linux for about 6 years
Programming for 28 (Professionally just 24)
twitter: @rarsamx
email: rarsa@yahoo.com
blog: http://rarsa.blogspot.com
blog: http://www.kwlug.org/blog/48

I welcome questions and comments during the presentation, but there are two kind of questions that I will defer for later.
- Questions or comments about things I'll talk later.
- Comments or questions about particular technologies I didn't include
I will provide the full mind map with links and comments on my KWLUG blog.



Interpreted at run time
Faster turn around development
High portability

Automates the execution of commands that would normally be interpreted by the command line

Originally developed for text manipulation
Practical, not beautiful
Lots of regular expressions
Lots of 3rd party modules
OO although almost no-one uses OO with Perl
Has the concept of "current" variable

Hypertext preprocesor
Especially suited for Web development
In the same category of JSP and ASP
Anything that's not code is output

General purpose OO
Easy to learn: Elegance and clarity are
Easy to read
Relies on C library functions

Compiled into an intermediate language which is interpreted at run time
Good portability
An interpreter (virtual machine) must exist to run them

http://www.yolinux.com/TUTORIALS/LinuxTutorialSoftwareDevelopment.html
http://www.faqs.org/docs/ldev/


Also know as command line, terminal, character mode

Other programs get information from the command line and send information to the command line.

nCurses provides a framework to create nice looking UI (User Interface)s in text mode.
sudo aptitude install libncurses5-dev

Graphical User Interface that allows the user to interact with programs graphically.
If you are targeting a particular Desktop environment, it is better if you develop under that environment to get all the dependencies, but test under another, to ensure you know what those dependencies are.


Almost no one starts from Scratch in Linux. There are libraries for everything,
Applications are usually small and stable as they rely on 3rd party libraries

A toolkit is a set of programming libraries that work together to simplify development.
A toolkit provides a consistent architecture and API.

A set of libraries, interfaces, paradigms, utilities and architecture to simplify the development of complex systems.
Frameworks provide a consistent way of doing things liberating the developer from the details of the platform.

Databases are special applications that help developers store, organize and access the data in a simple and consistent way.

Help you keep track of changes in your code.
Can help remember what you did to your code and when.
Helps communicating and coordinating with other developers working on the same project.

The grandfather of Linux version control systems.
Centralized model where all the changes go into a central repository.
It used to be the most popular but now most projects are migrating to other Version Control Systems.

Subversion was created to overcome the limitations of CVS.
Centralized model where all the changes go into a central repository.
It is currently aging and some projects are migrating to distributed Version Control Systems

Extremely fast distributed version control system.
Each developer has a personal repository where they can manage their own code and only integrate with other people's repository when they feel comfortable with their code.
Used by the Linux Kernel.
Many projects are migrating from CVS or Subversion to Git.



Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems.
Can be configured to have syntax highlighting, code completion and integration with compilers and debugers.
I takes time to learn how to use it but once mastered it can be more productive than traditinal graphical IDEs.
Lighter than Emacs.

Emacs is an extensible text editor.
Can be configured to have syntax highlighting, code completion and integration with compilers and debugers.
Mode files allow configuring it for particular development environments.
I takes time to learn how to use it but once mastered it can be more productive than traditinal graphical IDEs.
Some may say, more configurable than Vim.

IDE : Integrated Development Environment
IDEs are programs that provide facilities to the programmer,hiding details of project setup and compilation.
IDEs usually provide editors with syntax highlighting and code completion. Project management, Documentation generators, debuggers, compilers, etc. in a single package.

Multilanguage IDE
C, C++, Java, Python
Requires wxWidgets
Git integration (Enable Git Plugin)
Integrated Glade for UI design (Although not well integrated with C++)
Must manually associate UI and code

Unsupported in Lucid. Need to enable "Unsupported updates"
Can target KDE, Gnome and others
Used to be multilanguage on version 3.x for version 4 only C++ and PHP
Requires installing cmake separately (Ubuntu)

Professional quality IDE
Extensible
Primarily Java but other language plugins available
Android development environment
Nice tutorials at http://www.vogella.de
BlackBerry development environment

Java based development environment
Oracle (formerly Sun) sponsored.
Plugins for several other languages and frameworks including PHP/Zend, RubyOnRails, C, C++.

Development environment for the Mono framework.
Primarily C#
Plug-ins for other languages
For web development (ASP.NET) install xsp2
sudo aptitude install mono-xsp2
ASP.NET visual editor still under development

Just like the original Delphi
Desktop applications
Web Services toolkit for web services creation and consumption
Extensions for CGI development


Almost-typeless-environment to script GUI repetitive tasks.
Java based, Jython engine underneath
Not in repositories
Requires
- python-opencv
- libcvaux
- libcxxtools6
Context menus require capturing with another screen capture utility such as ksnapshot
Exporting to executable generates a file that can be executed by passing it as a parameter
Can create a shell script to execute without typing.

To join a Free and Open Source project you "usually" need to do the following:
- Use the application you want to contribute to.
- Learn the code (even if it is just a portion you are interested on)
- Contribute with small changes until the people in the corresponding development community know you
Eventually you will find your self contributing larger portions of code and seing your code and contributions used by many other people. It really feels good.
I said "usually" because different projects have different cultures and practices. Some are dictatorial with a single person deciding what is included into the code. Some others are democratic where people discuss what goes in. And some are quite open, with people contributing through different channels in an apparently cahotic way.

